from PySide6.QtWidgets import QMainWindow, QTabWidget
from login_tab import LoginTab
from query_tab import QueryTab
from order_manager_tab import OrderManagerTab
from settings_tab import SettingsTab
from monitoring_tab import MonitoringTab
from ticket_worker import TicketWorker

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        # 主界面模块化布局
        self.tabs = QTabWidget()
        self.setCentralWidget(self.tabs)
        
        # 功能页面实例化
        self.login_page = LoginTab()
        self.query_page = QueryTab()
        self.orders_page = OrderManagerTab()
        self.setting_page = SettingsTab()
        self.monitoring_page = MonitoringTab()
        
        # 添加标签页
        self.tabs.addTab(self.login_page, "登录认证")
        self.tabs.addTab(self.query_page, "车票查询") 
        self.tabs.addTab(self.orders_page, "订单管理")
        self.tabs.addTab(self.setting_page, "系统设置")
        self.tabs.addTab(self.monitoring_page, "系统监控")
        
        # 后台服务线程
        self.worker = TicketWorker()
        self.worker.result.connect(self.handle_result)
        self.worker.error.connect(self.handle_error)
        self.worker.qrcode_signal.connect(self.login_page.handle_qrcode_result)

        # 连接查询页面按钮事件
        self.query_page.start_btn.clicked.connect(self.start_monitoring)
        self.query_page.stop_btn.clicked.connect(self.stop_monitoring)
    
    def handle_result(self, data):
        # 处理后台线程返回的车票数据
        # 提取车次号列表（示例：取每个列车的number字段）
        recommendations = data.get('trains', [])
        # 更新查询页面的推荐车次列表
        self.query_page.update_recommendations(recommendations)
        # 更新状态提示
        self.query_page.status_bar.showMessage(f"获取到{len(recommendations)}个车次信息")

        # 从后台线程获取车站数据
        stations = data.get("stations", [])
        # 更新查询页面的车站自动补全数据
        self.query_page.update_station_completer(stations)

        # 从后台线程获取实际订单数据
        orders = data.get('orders', [])
        # 更新订单管理页面
        self.orders_page.load_orders(orders)
    
    def handle_error(self, error_msg):
        # 处理后台线程错误
        self.query_page.status_bar.showMessage(f"错误: {error_msg}")
        self.query_page.start_btn.setEnabled(True)
        self.query_page.stop_btn.setEnabled(False)

    def start_monitoring(self):
        # 立即禁用开始按钮防止重复点击
        self.query_page.start_btn.setEnabled(False)
        if self.worker.running:
            self.query_page.status_bar.showMessage("监控已在运行中...")
            return
        # 获取设置参数
        settings = self.setting_page.get_settings()
        # 更新后台线程配置
        self.worker.config = settings
        # 启动后台线程
        self.worker.start()
        # 更新停止按钮状态
        self.query_page.stop_btn.setEnabled(True)
        self.query_page.status_bar.showMessage("监控已启动...")

    def stop_monitoring(self):
        # 立即禁用停止按钮防止重复点击
        self.query_page.stop_btn.setEnabled(False)
        if not self.worker.running:
            self.query_page.status_bar.showMessage("监控未运行，无需停止...")
            # 恢复开始按钮状态
            self.query_page.start_btn.setEnabled(True)
            return
        # 停止后台线程
        self.worker.stop()
        # 更新开始按钮状态
        self.query_page.start_btn.setEnabled(True)
        self.query_page.status_bar.showMessage("监控已停止")